\documentclass{ctexart}
\usepackage{listings}%插入代码
\usepackage{geometry}%设置页面大小边距等
\usepackage{authblk}%作者机构等信息
\usepackage{graphicx}%插入图片
\usepackage{url}%Bib中引用网页
\usepackage{amssymb}%为了用\mathbb
\usepackage{amsmath}%数学方程的显示
\usepackage{amsthm}%数学定理
\usepackage{listings}%插入代码
\usepackage{fancyhdr}%设置页眉页脚
\usepackage{lastpage}%总页数
\usepackage{hyperref}%引用网页
\usepackage{xcolor}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes.geometric,chains}  %画流程图

\newtheorem{theorem}{Theorem}
\newtheorem{Proof}{proof}
\geometry{a4paper,left=2cm,right=2cm,top=2cm,bottom=2cm}%一定要放在前面！
\pagestyle{fancy}%设置页眉页脚
\lhead{}%页眉左
\chead{Julia集的分析和探索}%页眉中
\rhead{\small\leftmark}%章节信息
\cfoot{\thepage/\pageref{LastPage}}%当前页，记得调用前文提到的宏包
\rfoot{浙江大学数学科学学院}
\renewcommand{\headrulewidth}{0.1mm}%页眉线宽，设为0可以去页眉线
\renewcommand{\footrulewidth}{0.1mm}%页脚线宽，设为0可以去页眉线
\setlength{\headwidth}{\textwidth}

\hypersetup{%设置网页链接颜色等
    colorlinks=true,%链接将会有颜色，默认是红色
    linkcolor=blue,%内部链接，那些由交叉引用生成的链接将会变为蓝色（blue）
    filecolor=magenta,%链接到本地文件的链接将会变为洋红色（magenta）
    urlcolor=blue,%链接到网站的链接将会变为蓝绿色（cyan）
    }

\title{\textbf{Julia集的分析和探索}}
\author[1]{陈冠宇\ 3200102033}
\affil[1]{数学与应用数学\ 强基计划2001\ 浙江大学数学科学学院}
\date{\today}

\begin{document}
\maketitle

\section*{摘要}
  本文旨在介绍\emph{Julia}集以及其和\emph{Mandelbrot}集之间的关系。并从数学理论以及算法理论方面进行研究，并会列举具体的数值算例。

\noindent{\textbf{关键词：}Julia Set, Mandelbrot Set}

\setcounter{tocdepth}{4} %设定目录深度为i，只显示到i级标题为
\tableofcontents %列出目录

\newpage

\section{引言}
在\emph{HW04}中我们已经了解了关于\emph{Mandelbrot Set}\cite{HW04},即，\emph{Mandelbrot Set}由
\begin{equation}\label{1}
  Z_{n+1}=Z_n^2+C
\end{equation}
产生,此时$C\in \mathbb{C}$为固定值。但我们不妨在$z_0$固定后，将$C$作变化,此时对于不同的$C$,我们可以得到不同的集合。这些集合便是\emph{Julia Set}.
\section{问题的背景介绍}

Julia集合以法国数学家加斯顿·朱莉娅(Gaston Julia)的名字命名，他在1915年研究了这些集合的性质，并在1918年发表了著名的论文\emph{Mémoire sur l'itération des fonctions rationnelles}。虽然Julia集现在与\ \ref{1}\ 中的二次多项式相关联，但Julia对更一般表达式的迭代性质感兴趣.

由等式\ \ref{1}\ 定义的Julia集有各种形状，C的一个小变化可以极大地改变Julia集的形状。1979年，在计算机的帮助下，B.B.Mandelbrot研究了Julia集，试图对所有可能的形状进行分类，并提出了一种新的形状：Mandelbrot集。

\section{数学理论\cite{OrangeKiller}}
\subsection{逃逸准则}
\begin{theorem}
  对于$z_n=x_n+iy_n\in \mathbb{C},|z_n|=\sqrt{x_n^2+y_n^2}$,若对于一个复数序列$\{z_1,z_2,\cdots,z_n\}，|z_i|>max{\{2,|c|\}}$,则序列将逃逸到无穷大。
\end{theorem}
\begin{proof}
  当 $ \left|z_{j}\right|>\max (2,|c|) $，则

 1. 由  $\left|z_{j}\right|>2$ 可知
 \begin{equation}
   \begin{split}
        & \left|z_{j}\right|=2+\epsilon \\
       &|z_{j}^{2}|=\left|z_{j}^{2}+c-c\right|\geq\left|z_{j}^{2}+c\right|+|c|
   \end{split}
 \end{equation}
 因此，我们得到
 \begin{equation}
   |z_{j+1}|=|z_{j}^{2}+c| \geq |z_{j}^{2}|-|c|=|z_{j} |^{2}-|c| > |z_{j}|^{2} - |z_{j}| > |z_{j}|(|z_{j}|-1) > |z_{j}|(1+\epsilon)
 \end{equation}

 那么在k次迭代后，我们得到$|z_{j+k}^{2}+c| > |z_{j}|(1+e)^{k}$\\
 $\Rightarrow$序列趋于无穷

 2. 如果 $ |c| \geq 2$,可得$z_{0}=0, z_{1}=c, \quad z_{2}=c \times(c+1)$\\
 由$|c+1|>1,\left|c^{2}+c\right|>|c|$
 $\Rightarrow \frac{|z_2|}{|z_1|}=\frac{|c^{2}+c|}{|c|}>1$

 则对于任意$z_{j}$，设$|z_{j}|=p>1$，我们有  $\frac{|z_{j+1}|}{|z_{j}|} >\epsilon$，对于 $\epsilon >1$

 归纳得序列趋于无穷。
\end{proof}

\section{算法实现}
\subsection{Window.h}
在Window.h中我们定义了Window类，要求用户输入原点坐标信息和范围。E.g.$dimension=5$代表图片最右边代表坐标$(5,0)$,最左边代表 $(-5,0)$.以及关于迭代常数的信息,E.g.0 0.64代表cx(C的横坐标)=0，cy(C的纵坐标)=0.64,$(C=0+0.64i)$

\begin{lstlisting}[frame=single,basicstyle=\ttfamily,columns=flexible]
var height,width:           int     %高宽
var _ox,_oy,dimension:      double  %原点横纵坐标，页面范围
lpp <- dimension*2/width;
\end{lstlisting}
\subsection{Julia.h}

\subsubsection{定义\emph{Iteration}类}
\begin{lstlisting}[frame=single,basicstyle=\ttfamily,columns=flexible]
get_iteration_point();  %返回迭代点 iteration_point
get_iteration_times();  %返回迭代次数 iteration_times
\end{lstlisting}

\subsubsection{定义\emph{Julia}类}
\begin{lstlisting}[frame=single,basicstyle=\ttfamily,columns=flexible]
forward_step();             %继续迭代
stop_criterion();           %迭代停止，返回flag_stop = true
is_disconvergence();        %判断不收敛，返回flag_disconvergence = true
\end{lstlisting}

\subsection{主函数Julia.cpp}
\subsubsection{伪代码：}
\begin{lstlisting}[frame=single,basicstyle=\ttfamily,columns=flexible]
var *cache:                     char[width*height*3]    %存放三原色信息
var pos,width,height,x,y,N:     int
%坐标处颜色信息，宽高（单位：像素）,横纵坐标,迭代最大次数
var Julia:                      Julia
var cx,cy:                      double                  %C的横纵坐标
for i: = 0 to height
    for j: = 0 to width
        x <- ox + lpp * i;
        y <- oy + lpp * j;
        pos <- width*j + i;
        call Julia({x,y},N,{cx,cy})；
        while flag_stop != true
            do
            call forward_step
            if flag_disconvergence = true
                then break
            end if
        end while
        if flag_stop = true
            then
                cache[pos*3] <- 255;
                cache[pos*3+1] <- 255;
                cache[pos*3+2] <- 255;
            else
                cache[pos*3] <- 0;
                cache[pos*3+1] <- 0;
                cache[pos*3+2] <- 0;
        end if
    end for
end for
call build_bmp with width, height and cache %#include "bitmap.h"
\end{lstlisting}
\subsubsection{具体代码}
具体代码可以参考\ \href{https://gitee.com/Zebrainy-cgy/math-soft/tree/master/fourth/bitmap-master/src}{我的Gitee}
\subsection{关于Mandelbrot集实现}
关于Mandelbrot集的实现只需要将$(x,y)$固定为$(0,0)$，$(cx,cy)$替换为$(x,y)$即可。具体代码可以参考\ \href{https://gitee.com/Zebrainy-cgy/math-soft/tree/master/fourth/bitmap-master/src} {我的Gitee}
\subsection{补充Julia算法流程图}
\thispagestyle{empty}
% 流程图定义基本形状
\tikzstyle{startstop} = [rectangle, rounded corners, minimum width = 2cm, minimum height=1cm,text centered, draw = black]
\tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=2cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{decision} = [diamond, aspect = 3, text centered, draw=black]
% 箭头形式
\tikzstyle{arrow} = [->,>=stealth]

\begin{tikzpicture}[node distance=1cm]
%定义流程图具体形状
\centering
\node[startstop](start){Start};
\node[io, below of = start, yshift = -1cm](in1){Input$z_0$};
\node[process, below of = in1, yshift = -1cm](pro1){$z_{n+1}^2=z_n^2+C$};
\node[decision, below of = pro1, yshift = -1cm](dec1){$z_n>10^8?$};
\node[io, right of = dec1, xshift = 5cm](in2){$z_0 \notin Julia$};
\node[decision, below of = dec1, yshift = -1cm](dec2){$n>100?$};
\node[io, below of = dec2, yshift = -1cm](out1){$z_0 \in Julia$};
\node[startstop, below of = out1, yshift = -1cm](stop){Stop};
\coordinate (point1) at (-3cm, -8cm);
%连接具体形状
\draw [arrow] (start) -- (in1);
\draw [arrow] (in1) -- node [right] {$n=0$}(pro1);
\draw [arrow] (pro1) -- node [right] {$n=n+1$}(dec1);
\draw [arrow] (dec1) -- node [above] {Yes} (in2);
\draw [arrow] (in2) |- (stop);
\draw (dec2) -- node [above] {No} (point1);
\draw [arrow] (point1) |- (pro1);
\draw [arrow] (dec1) -- node [right] {No} (dec2);
\draw [arrow] (dec2) -- node [right] {Yes}(out1);
\draw [arrow] (out1) -- (stop);
\end{tikzpicture}
\newpage

\section{数值算例input:0 0 3}
\subsection{不同C的$Julia$集}
\begin{figure}[htbp]
  \centering
    \begin{minipage}[t]{0.2\textwidth}
    \centering
    \includegraphics[width=1.1\textwidth]{../figures/1.png}
    \caption{\tiny{$C_0=(0,0)$}}
  \end{minipage}
    \begin{minipage}[t]{0.2\textwidth}
    \centering
    \includegraphics[width=1.1\textwidth]{../figures/2.png}
    \caption{\tiny{$C_0=(0,0)$}}
  \end{minipage}
    \begin{minipage}[t]{0.2\textwidth}
    \centering
    \includegraphics[width=1.1\textwidth]{../figures/3.png}
    \caption{\tiny{$C_0=(0,0)$}}
  \end{minipage}
    \begin{minipage}[t]{0.2\textwidth}
    \centering
    \includegraphics[width=1.1\textwidth]{../figures/4.png}
    \caption{\tiny{$C_0=(0,0)$}}
  \end{minipage}

  \begin{minipage}[t]{0.2\textwidth}
    \centering
    \includegraphics[width=1.1\textwidth]{../figures/(0,0).bmp}
    \caption{\tiny{$C_0=(0,0)$}}
  \end{minipage}
  \begin{minipage}[t]{0.2\textwidth}
    \centering
    \includegraphics[width=1.1\textwidth]{../figures/(0,0.64i).bmp}
    \caption{\tiny{$C_0=(0,0.64i)$}}
  \end{minipage}
  \begin{minipage}[t]{0.2\textwidth}
    \centering
    \includegraphics[width=1.1\textwidth]{../figures/(-0.74,0).bmp}
    \caption{\tiny{$C_0=(-0.74,0)$}}
  \end{minipage}
  \begin{minipage}[t]{0.2\textwidth}
    \centering
    \includegraphics[width=1.1\textwidth]{../figures/(0.39,0.21i).bmp}
    \caption{\tiny{$C_0=(0.39,0.21)$}}
  \end{minipage}
\cite{ComplexAnalysis}
\end{figure}
\subsection{$Mandelbrot$集实现}
\centerline{\includegraphics[scale=0.3]{../figures/test.bmp}}
\section{Julia Set \& Mandelbrot Set}
由于Mandelbrot集的定义，Mandelbrot集在给定点的几何与相应Julia集的结构之间存在密切的对应关系。换句话说，Mandelbrot集形成了Julia集的一种索引，每一个C对应一个独特的$Julia$集。

Julia集是连通或断开的，从Mandelbrot集内选择的c值是连通的，而从Mandelbrot集外选择的c值是断开的。断开连接的集合通常被称为尘埃，它们由单个点组成.\cite{ComplexAnalysis}

\bibliographystyle{plain}
\bibliography{reference}
\end{document} 